package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.PO.OperateEngineerProjectPO;
import com.itlong.cloud.POJO.PO.OperateUserInfoPO;
import com.itlong.cloud.POJO.VO.operate.OperateEngineerProjectVO;
import com.itlong.cloud.POJO.VO.operate.OperateUserInfoGetOneVO;
import com.itlong.cloud.POJO.VO.operate.OperateUserInfoGetUserPageVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      运营系统用户信息数据访问接口
 * </desc>
 *
 * @createDate 2017/9/13
 */
@Mapper
@Repository
public interface IOperateUserInfoDao extends IAbstractBaseDao<OperateUserInfoPO>{
    /**
     * <desc>
     *      保存人员
     * </desc>
     *
     * @param params 数据参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    Integer save(Map<String,Object> params);

    /**
     * <desc>
     *      修改人员
     * </desc>
     *
     * @param params 数据参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    Integer update(Map<String,Object> params);

    /**
     * <desc>
     *      根据id获取用户信息
     * </desc>
     *
     * @param operateUserInfoPO 用户实体
     * @return 用户VO实体
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    OperateUserInfoGetOneVO getOneForVO(OperateUserInfoPO operateUserInfoPO);

    /**
     * <desc>
     *      获取分页数据集
     * </desc>
     *
     * @param params  查询参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    List<OperateUserInfoGetUserPageVO> getPage(Map<String,Object> params);


    /**
     * <desc>
     *      获取分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    Integer getPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      获取最大编号
     * </desc>
     *
     * @return 最大编号
     * @author Jiaqi.X
     * @createDate 2017/09/26
     */
    String getMaxNum();

    /**
     * <desc>
     *      删除
     * </desc>
     *
     * @param userIds 用户id数组
     * @return sql执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/28
     */
    Integer delete(@Param("userIds")String[] userIds,@Param("updateTime") Date updateTime);

    /**
     * <desc>
     *      保存用户角色
     * </desc>
     *
     * @param params 数据参数map
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/11
     */
    Integer saveUserRoles(Map<String,Object> params);

    /**
     * <desc>
     *      检测账号是否已存在
     * </desc>
     *
     * @param userName 用户名
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/11
     */
    Integer checkUserName(@Param("userName") String userName);

    /**
     * <desc>
     *      删除用户的角色
     * </desc>
     *
     * @param userId 用户id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/11
     */
    Integer deleteUserRoles(@Param("userId")String userId);

    /**
     * <desc>
     *      重置用户密码
     * </desc>
     *
     * @param userIds 用户id数组
     * @param password 密码
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/12
     */
    Integer resetPassword(
                @Param("userIds") String[] userIds,
                @Param("password")String password,
                @Param("updateTime")Date updateTime);

    /**
     * <desc>
     *      通过用户名及密码查询用户信息
     * </desc>
     *
     * @param userInfoPO 用户实体类
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/12
     */
    OperateUserInfoPO getUserInfoByUserNameAndPassword(OperateUserInfoPO userInfoPO);

    /**
     * <desc>
     * 添加app工程人员与项目的关系
     * </desc>
     *
     * @return
     * @params 数据参数
     * @author Jiaqi.X
     * @createDate 2017/10/11
     */
    Integer saveEngineerProjectRelation(Map<String, Object> params);

    /**
     * <desc>
     *      删除工程人员与项目之间的关系
     * </desc>
     *
     * @param userId 用户id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/29
     */
    Integer deleteEngineerProjectRelation(@Param("userId") String userId);

    /**
     * <desc>
     *      查询工程人员的id
     * </desc>
     * @param userId
     * @return
     */
    Map<String,Object> getEngineerProjectInfo(@Param("userId") String userId);

    /**
     * <desc>
     *      根据条件查询人员
     * </desc>
     * @param    params  查询参数
     * @return  List<OperateUserInfoPO> 人员实体集合
     * @author Juguang.S
     * @createDate 2018/07/18
     *
     */
    List<OperateUserInfoPO> getByFields(Map<String, Object> params);

    /**
     * <desc>
     *      用户所属角色是否是工程部管理员
     * </desc>
     *
     * @param userId
     * @return
     * @Author Juguang.S
     * @createDate  2020/07/06
     */
    Integer isEngineerManage(@Param("userId") String userId);

    /**
     * <desc>
     *      获取用户信息
     * </desc>
     *
     * @param userName 用户名
     * @return
     * @Author Zhu.yj
     * @createDate  2020/8/25
     */
    OperateUserInfoPO getUserByUserName(@Param("userName") String userName);

    /**
     * <desc>
     *      批量保存工程项目关联
     * </desc>
     *
     * @param list
     * @return
     * @Author Zhu.yj
     * @createDate  2021/2/1
     */
    Integer batchSaveEngineerProject(List<OperateEngineerProjectPO> list);

    /**
     * <desc>
     *      获取工程人员的项目列表
     * </desc>
     *
     * @param params userId,projectId
     * @return
     * @Author Zhu.yj
     * @createDate  2021/2/1
     */
    List<OperateEngineerProjectVO> getEngineerProjectList(Map<String, Object> params);
}
